package top.lixunda.ecommerce.server.good.service;

import com.baomidou.mybatisplus.extension.service.IService;
import top.lixunda.ecommerce.server.good.api.entity.db.GoodOrderDO;
import top.lixunda.ecommerce.server.good.api.entity.dto.DeliverGoodChangeDTO;
import top.lixunda.ecommerce.server.good.api.entity.dto.DeliverGoodDTO;
import top.lixunda.ecommerce.server.good.api.entity.vo.OrderDistinguishVO;
import top.lixunda.ecommerce.server.good.api.entity.vo.OrderTranceVO;

import java.util.List;

/**
 * @author lixunda
 * @version time:2020/3/5 15:38
 */
public interface IGoodDeliverService extends IService<GoodOrderDO> {

    /**
     * 对某个订单进行发货
     *
     * @param deliverGoodList 发货相关信息，包括物流信息
     * @return 返回订单发货后的订单基本信息
     */
    List<GoodOrderDO> deliverGoodByOrderIds(List<DeliverGoodDTO> deliverGoodList);

    /**
     * 对某个订单进行发货
     *
     * @param deliverGoodDTO 发货相关信息，包括物流信息
     * @return 返回订单发货后的订单基本信息
     */
    GoodOrderDO deliverGoodByOrderId(DeliverGoodDTO deliverGoodDTO);

    /**
     * 修改发货后的订单发货信息
     *
     * @param deliverGoodChangeList 发货相关信息，包括物流信息
     * @return 返回订单发货后的订单基本信息
     */
    List<GoodOrderDO> changeDeliverGoodByOrderIds(List<DeliverGoodChangeDTO> deliverGoodChangeList);

    /**
     * 修改发货后的订单发货信息
     *
     * @param deliverGoodChangeDTO 发货相关信息，包括物流信息
     * @return 返回订单发货后的订单基本信息
     */
    GoodOrderDO changeDeliverGoodByOrderId(DeliverGoodChangeDTO deliverGoodChangeDTO);

    /**
     * 根据订单id取消发货信息
     *
     * @param orderIds 订单id
     * @return 是否取消成功
     */
    boolean cancelDeliverByOrderIds(List<Integer> orderIds);

    /**
     * 物流订单号识别
     *
     * @param code 物流订单号
     * @return 识别信息，可能多个
     */
    List<OrderDistinguishVO> orderDistinguish(String code);

    /**
     * 管理员用户调用，根据订单号查询物流信息
     *
     * @param orderId 订单id
     * @return 物流信息
     */
    OrderTranceVO queryTranceByOrderIdAdmin(Integer orderId);

    /**
     * 商铺用户调用，根据订单号查询物流信息
     *
     * @param orderId 订单id
     * @return 物流信息
     */
    OrderTranceVO queryTranceByOrderIdStore(Integer orderId);

    /**
     * 用户调用，根据订单号查询物流信息
     *
     * @param orderId 订单id
     * @return 物流信息
     */
    OrderTranceVO queryTranceByOrderIdUser(Integer orderId);

    /**
     * 用户调用，根据订单号收货
     *
     * @param orderId 订单id
     * @return 收货是否成功
     */
    Boolean takeDeliveryByOrderId(Integer orderId);

    /**
     * 用户调用，根据订单号收货
     *
     * @param orderIds 订单id
     * @return 收货是否成功
     */
    Boolean takeDeliveryByOrderIds(List<Integer> orderIds);

}
